Flutter提供了Transform
小部件,用來實現平移、旋轉和縮放等變換效果。
常見效果用法
transform: Matrix4.translationValues(_xPosition, 0, 0) // 平移變換
..rotateZ(_rotation) // 旋轉變換
..scale(_scale), // 縮放變換
完整範例:按下按鈕實現平移、旋轉和縮放
常見的變換方法:translate(_xPosition, 0, 0)
:_xPosition是一個變數,它用於控制平移效果,另外兩個值控制高度與深度。rotateZ(angle)
:其中angle是旋轉的角度,以弧度為單位。在示例中,rotateZ(0.2)
表示逆時針旋轉約11.46度。scale(scaleFactor)
:其中scaleFactor是縮放因子。1.0表示原始大小,小於1.0表示縮小,大於1.0表示放大。在下列示例中,scale(2)
表示將部件放大2倍。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: AnimatedShapeDemo(),
);
}
}
class AnimatedShapeDemo extends StatefulWidget {
@override
_AnimatedShapeDemoState createState() => _AnimatedShapeDemoState();
}
class _AnimatedShapeDemoState extends State<AnimatedShapeDemo> {
double _xPosition = 0.0; // 控制平移的變數
double _rotation = 0.0; // 控制旋轉的變數
double _scale = 1.0; // 控制縮放的變數
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter 平移、旋轉和縮放動畫'),
),
body: Center(
child: AnimatedContainer(
duration: Duration(seconds: 1), // 動畫的持續時間
transform: Matrix4.translationValues(_xPosition, 0, 0) // 平移變換
..rotateZ(_rotation) // 旋轉變換
..scale(_scale), // 縮放變換
width: 100,
height: 100,
color: Colors.blue,
child: Center(
child: Text(
'動畫元素',
style: TextStyle(color: Colors.white),
),
),
),
),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: () {
setState(() {
_xPosition = 100.0; // 點擊按鈕後,設定新的平移值
});
},
child: Icon(Icons.arrow_forward), //右箭頭icon
),
FloatingActionButton(
onPressed: () {
setState(() {
_rotation += 0.2; // 點擊按鈕後,增加旋轉值
});
},
child: Icon(Icons.rotate_right), //旋轉icon
),
FloatingActionButton(
onPressed: () {
setState(() {
_scale = 2; // 點擊按鈕後,設定新的縮放值
});
},
child: Icon(Icons.zoom_in), //放大鏡icon
),
],
),
);
}
}
執行結果
原始
平移
旋轉
放大